package connect_tx_sdk.service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.http.NameValuePair;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import connect_tx_sdk.config.QQConfig;
import connect_tx_sdk.utils.ConnectUtils;
import connect_tx_sdk.utils.HttpClientUtils;

/**
 * 
 * @创建作者：hiyoucai@126.com
 * @创建时间：2011-6-17 下午04:59:54
 * @文件描述：
 */
public class UserToken {
	
	/**
	 * 
	 * 方法说明： API文档说明：<a href="http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91Qzone_OAuth%E8%AE%A4%E8%AF%81%E7%AE%80%E4%BB%8B" target="_blank">查看</a><br/>
	 * <br/>
	 * 创建日期：2011-6-17,下午03:01:44,hyc <br/>
	 * @param access_token 这个参数的意义：Step5请求具有Qzone访问权限的access_token时返回的字会话串
	 * @throws Exception 
	 */
	public Map<String,Object> user(String access_token) throws Exception{		
		
		String url = "http://openapi.qzone.qq.com/user/get_user_info";

		List<NameValuePair> parameters = new ArrayList<NameValuePair>();

		String oauth_timestamp = ConnectUtils.getOauthTimestamp();
		String oauth_nonce = ConnectUtils.getOauthNonce();		
		
		Map<String, String> tokens = ConnectUtils.parseTokenResult(access_token);
		String oauth_token = tokens.get("oauth_token");
		String oauth_token_secret = tokens.get("oauth_token_secret");
		String openid = tokens.get("openid");


		parameters.add(new BasicNameValuePair("format", "xml"));
		parameters.add(new BasicNameValuePair("oauth_consumer_key", QQConfig.appid));
		parameters.add(new BasicNameValuePair("oauth_nonce", oauth_nonce));
		parameters.add(new BasicNameValuePair("oauth_signature_method", "HMAC-SHA1"));
		parameters.add(new BasicNameValuePair("oauth_timestamp", oauth_timestamp));
		parameters.add(new BasicNameValuePair("oauth_token", oauth_token));
		parameters.add(new BasicNameValuePair("oauth_version", "1.0"));
		parameters.add(new BasicNameValuePair("openid", openid));

		String oauth_signature = ConnectUtils.getOauthSignature("GET", url, parameters, oauth_token_secret);
		parameters.add(new BasicNameValuePair("oauth_signature", oauth_signature));

		url += "?" + ConnectUtils.getSerialParameters(parameters, true);
		DefaultHttpClient httpclient = HttpClientUtils.getHttpClient();
		String html = HttpClientUtils.getHtml(httpclient, url, "UTF-8");
		
		if(html.indexOf("errorcode") >= 0){
			return null;
		}

		return ConnectUtils.parseXmlToMap(html);
	}
	
	public static void main(String[] args) throws Exception {
		
		if(true){
			//access_token这个字符串，就是腾讯认证第五步返回的纯文本结果(AccessToken类返回的字符串)，建议保存到数据库里，方便下次读出来。
			//测试的时候，把你相应的认证串access_token复制这里就可以。
			//这个参数必须要改成你的，而且也要改那个connect.properties，否则返回参数错误。
			String access_token = "oauth_signature=H2we5IWQd%2BG7mlrGHs2DVkFhdYc%3D&oauth_token=12323181257513439816&oauth_token_secret=f3yCdgAD4En8Vcks&openid=6ED93B1934A4178F6E799C5180484D26&timestamp=1009145739";
			Map<String, Object> u = new UserToken().user(access_token);
			System.out.println(u);
		}
	}
}
